
package ve.org.src.sesiones

/**
 * Clase encargada de la administracion de sesiones.
 * @author LRangel
 */
class ManejadorSesiones {
    
    private static def mapaSesiones=[:]
    private static int tiempoLimite=15//minutos

    static sesionRegistrada(def usuario){
        return mapaSesiones.containsKey(usuario)
    }

    static registrarSesion(usuario,sesionBean){        
        mapaSesiones.put(usuario,sesionBean)
    }

    static listarSesionesActivas(){
        return mapaSesiones;
    }

    static caducarSesion(def usuario){
        mapaSesiones.remove(usuario)
    }

    //Metodo que compara contra un valor si la sesion no ha expirado,
    //en caso de caducar actualiza el ultimo acceso
    static verificarInactividad(def usuario,boolean actualizar){
        
        def sesionBean = mapaSesiones.get(usuario)
        if(null != sesionBean){
            Date fechaActual = new Date()
            Date fechaUltimoAcceso = sesionBean.ultimoAcceso
            long limiteTiempo=tiempoLimite*60*1000;
            if((fechaUltimoAcceso.getTime()+limiteTiempo) <= fechaActual.getTime()){                               
                mapaSesiones.remove(usuario)
                return true
            }else{
                if(actualizar)
                sesionBean.ultimoAcceso=fechaActual
                return false
            }
        }
        return true
    }
    
    //Metodo que agrega la sesion del usuario al mapa de sesiones,
    // si ya existe, verifica si se encuentra inactivo.
    static verificarSesion(loginUsuario,ip)
    {        
        Date fechaActual=new Date()
        
        def s=mapaSesiones.get(loginUsuario)
        if (s==null){
            def sesion = new SesionBean()
            sesion.usuario=loginUsuario
            sesion.ip=ip
            sesion.acceso=fechaActual
            sesion.ultimoAcceso=fechaActual     
            mapaSesiones.put(loginUsuario,sesion)
        }
        else{
            boolean inactivo=verificarInactividad(loginUsuario,false)
            println "-------------------------------------inactividad "+inactivo
            if (inactivo==true){
                def sesion = new SesionBean()
                sesion.usuario=loginUsuario
                sesion.ip=ip
                sesion.acceso=fechaActual
                sesion.ultimoAcceso=fechaActual
                mapaSesiones.put(loginUsuario,sesion)
            }
            return inactivo
            //pendiente
            //return false

        }
        return true
    }
}
